"""
螺旋素数

从1开始逆时针螺旋着摆放自然数，构造出一个边长为7的螺旋数阵(如下所示)。
        37 36 35 34 33 32 31
        38 17 16 15 14 13 30
        39 18 5  4  3  12 29
        40 19 6  1  2  11 28
        41 20 7  8  9  10 27
        42 21 22 23 24 25 26
        43 44 45 46 47 48 49
可以发现，所有的奇数平方都在这个螺旋方针的右下对角线上，更有趣的是，在所有对角线上一共有8个素数(红色数字)，
比例达到8/13 ≈ 62%。

在这个方阵外面完整地再加上一层，就能构造出一个边长为9的螺旋方阵。如果不断重复这个过程，
当对角线上素数的比例第一次低于10%时，螺旋数阵的边长是。

"""

def is_prime(n):
    if n==1:
        return False
    elif n==2:
        return True
    else:
        for i in range(2,int(n**0.5)+1):
            if n%i==0:
                return False
        else:
            return True

num=1
t=2
result=0
while True:
    num=num+t
    if is_prime(num):
        result+=1
    if int(num**0.5)==num**0.5 and num%2==1:
        if result/(2*t+1)<0.1:
            print(t+1)
            break
        t+=2





def JudgePrime(number):#判断素数
    if number == 1:
        return False
    elif number == 2:
        return True
    for ip in range(2, int(number ** 0.5) + 1):
        if number % ip == 0:
            return False
    return True
def Judge(exlist):#判断素数的个数
    pcount = 0
    for ip in exlist:
        if JudgePrime(ip):
            pcount += 1
    return pcount

percent = 1
#利用start 和 per 得到增加的对角线数字
start = [1, 1, 1, 1]
per = [2, 4, 6, 8]
times = 1
primecount = 0
c = 1

while percent >= 0.1:
    exli = []#边长每增加2， 对角线元素增加的数字
    for j in range(len(start)):
        exli.append(start[j] + per[j])
    primecount += Judge(exli)#累积的素数个数
    percent = primecount / (1 + c * 4)#素数比例
    times += 2#边长
    c += 1
    start = exli.copy()
    for ia in range(len(per)):
        per[ia] += 8
print(times)
# 答案：26241